每天一个技术点

(2023.7.26)多角度看待问题-1[XDdbg]

本文作者:XDbgPYG(小吧唧)
发布时间:2023年7月26日
内容概要:某球大作战的多角度分析吐球加速

0. 观察原吐球速度

内含有 gif 文件,可能需要使用 vscode 查看。
原吐球速度大概就是这样了,没啥好讲的。

1. 逆向分析某加速脚本

这是我之前在一个辅助论坛里下载的脚本,通过 GameGuardian 解析脚本内容,然后调用读写接口,实现 x 球、x 骑士的辅助功能。

function dzsh(x,Text)return (Text:gsub("..",function(x)return string.char((tonumber(x,16))%256)end))end
function MKEJR(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1594)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function MPDTR(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1487)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function LUCDK(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1976)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function NGYTC(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1713)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function HJOPB(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1988)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function YXGUL(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1108)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function JSDMD(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1577)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function VVSZA(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1623)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function APVEM(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1001)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function KFUFW(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1339)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function DOXRL(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1034)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function EPVHY(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1606)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function ATFNU(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1288)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function DCMBM(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1949)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function MZUZY(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1044)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function ODQCD(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1187)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function GVMMJ(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1078)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function PYGKL(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1255)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function EJSNJ(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1482)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function MMRSV(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1731)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function WKZSV(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1926)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function VZURB(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1880)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function BOLSL(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1347)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function YPRDJ(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1455)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function ZRRMT(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1095)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function PAQQR(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1030)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function FEDTO(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1568)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function PXAUE(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1962)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function SQVXL(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1300)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function HDEUK(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1856)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function VZDBS(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1509)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function LCKDZ(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1340)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function TUFKZ(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1913)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function FCTFT(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1099)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function GOHBC(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1730)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function XUEAA(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1044)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function LLRZV(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1643)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function JWMXA(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1536)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function GSCPM(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1036)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function FYSJR(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1104)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function WPULL(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1094)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function FPVKA(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1675)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function PECCV(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1154)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function CYSMR(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1696)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function UAHSG(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1392)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function GEGRP(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1888)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function YNHHD(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1318)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function JVSEZ(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1868)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function AXCYR(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1070)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function SFQJV(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]+1995)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function LUKQT(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1197)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function OHZMN(s6) char={} for i=1,#s6 do table.insert(char,string.char(s6[i]-1189)) end s1=table.concat(char,"") return dzsh(s6,s1) end
function Main0()
SN = gg.choice({
	 MKEJR({1663,1649,1651,1642,1650,1645,1663,1649,1651,1642,1650,1645,1663,1647,1650,1659,1651,1664,1663,1650,1650,1645,1660,1662}),
	 MPDTR({1556,1540,1553,1554,1543,1535,1556,1540,1553,1536,1543,1535,1556,1540,1543,1540,1543,1538,1556,1541,1553,1535,1544,1539}),
	 LUCDK({-1907,-1923,-1920,-1923,-1920,-1925,-1907,-1922,-1910,-1928,-1919,-1924,-1907,-1919,-1911,-1911,-1919,-1927,-1907,-1923,-1911,-1925,-1911,-1910}),
	 NGYTC({-1644,-1656,-1657,-1665,-1657,-1665,-1644,-1660,-1657,-1658,-1647,-1648}),
}, nil, HJOPB({}))
if SN==1 then
	 Main1()
end
if SN==2 then
	 Main19()
end
if SN==3 then
	 Main6()
end
if SN==4 then
	 HS22()
end
FX1=0
end

function Main1()
SN = gg.multiChoice({
	 YXGUL({-1039,-1055,-1051,-1060,-1051,-1060,-1039,-1053,-1051,-1060,-1052,-1057,-1039,-1055,-1052,-1043,-1043,-1060,-1039,-1051,-1052,-1060,-1051,-1038,-1058,-1052,-1039,-1055,-1051,-1060,-1051,-1060,-1039,-1055,-1052,-1053,-1043,-1060,-1039,-1056,-1042,-1052,-1043,-1043,-1039,-1053,-1051,-1060,-1052,-1057,-1039,-1055,-1042,-1041,-1052,-1060,-1058,-1051}),
	 JSDMD({1646,1630,1633,1633,1633,1631,1646,1633,1643,1642,1642,1643,1646,1630,1633,1642,1642,1625,1646,1634,1633,1625,1634,1647}),
	 VVSZA({1692,1679,1688,1678,1679,1677,1692,1680,1679,1678,1679,1692,1692,1677,1679,1680,1688,1680,1692,1676,1688,1675,1688,1678}),
	 APVEM({-932,-945,-935,-931,-944,-949,-932,-948,-944,-935,-944,-932}),
	 KFUFW({1408,1396,1395,1387,1395,1387,1408,1392,1395,1394,1405,1404}),
}, nil,DOXRL({-965,-978,-968,-981,-968,-979,-965,-978,-968,-981,-968,-979,-965,-978,-977,-986,-968,-966,-965,-978,-977,-986,-968,-966,-965,-980,-968,-978,-978,-981,-965,-980,-969,-967,-969,-984,-965,-981,-968,-986,-968,-966}))
if SN[1]==true then
	 HS2()
end
if SN[2]==true then
	 HS3()
end
if SN[3]==true then
	 HS7()
end
if SN[4]==true then
	 HS12()
end
if SN[5]==true then
	 HS13()
end
FX1=0
end

function HS2()
	 gg.clearResults()
	 gg.setRanges(4)
	 gg.searchNumber(EPVHY({-1555,-1557,-1556,-1539,-1555,-1558,-1555,-1555,-1555,-1549,-1556,-1539,-1555,-1553,-1555,-1557,-1555,-1552,-1556,-1539,-1555,-1555,-1555,-1558,-1555,-1555}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.searchNumber(ATFNU({-1237,-1239,-1238,-1221,-1237,-1240,-1237,-1237,-1237,-1231,-1238,-1221,-1237,-1235,-1237,-1239,-1237,-1234,-1238,-1221,-1237,-1237,-1237,-1240,-1237,-1237}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.getResults(100)
	 gg.editAll(DCMBM({-1898,-1901}), gg.TYPE_DWORD)
	 gg.toast(MZUZY({1113,1097,1110,1111,1100,1092,1113,1097,1101,1092,1109,1114,1113,1098,1100,1100,1101,1092,1113,1097,1100,1109,1101,1114,1113,1114,1110,1111,1100,1111,1113,1097,1109,1100,1110,1093,1113,1096,1110,1101,1101,1092,1113,1097,1101,1092,1101,1092,1113,1099,1101,1092,1100,1095,1113,1097,1100,1109,1109,1092,1113,1101,1100,1092,1101,1114}))
	 gg.clearResults()
end

function HS3()
	 gg.clearResults()
	 gg.setRanges(4)
	 gg.searchNumber(ODQCD({1238,1236,1237,1254,1238,1235,1238,1238,1238,1236,1237,1254,1238,1236,1238,1237,1238,1242,1237,1254,1238,1241,1238,1244,1238,1240}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.searchNumber(GVMMJ({-1027,-1029,-1028,-1011,-1027,-1030,-1027,-1027,-1027,-1029,-1028,-1011,-1027,-1029,-1027,-1028,-1027,-1023,-1028,-1011,-1027,-1024,-1027,-1021,-1027,-1025}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.getResults(100)
	 gg.editAll(PYGKL({-1204,-1207}), gg.TYPE_DWORD)
	 gg.toast(EJSNJ({-1413,-1429,-1416,-1415,-1426,-1434,-1413,-1429,-1425,-1434,-1417,-1412,-1413,-1428,-1426,-1426,-1425,-1434,-1413,-1429,-1426,-1417,-1425,-1412}))
	 gg.clearResults()
end

function HS7()
	 gg.clearResults()
	 gg.setRanges(4)
	 gg.searchNumber(MMRSV({1782,1785,1782,1779,1781,1800,1782,1779,1782,1797,1781,1799,1782,1780,1782,1779,1781,1800,1782,1779,1782,1797,1782,1785,1782,1779,1781,1800,1782,1779,1782,1797,1781,1799,1782,1780,1782,1779,1781,1800,1782,1779,1782,1797,1782,1785,1782,1779,1781,1800,1782,1779,1782,1797,1782,1779,1781,1800,1782,1784,1782,1797,1782,1779,1781,1800,1782,1784,1782,1797,1782,1779,1781,1800,1782,1784,1782,1796,1782,1784,1782,1786}), gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
	 gg.searchNumber(WKZSV({-1875,-1878,-1876,-1857,-1875,-1873}), gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1)
	 gg.getResults(100)
	 gg.editAll(VZURB({1931,1929}), gg.TYPE_FLOAT)
	 gg.toast(BOLSL({-1278,-1294,-1281,-1280,-1291,-1299,-1278,-1294,-1290,-1299,-1282,-1277,-1278,-1293,-1291,-1291,-1290,-1299,-1278,-1294,-1291,-1282,-1290,-1277}))
	 gg.clearResults()
end

function HS12()
	 Main0()
end

function HS13()
	 os.exit()
end

function Main19()
SN = gg.multiChoice({
	 YPRDJ({1524,1512,1520,1520,1512,1504,1524,1508,1520,1506,1520,1521}),
}, nil, ZRRMT({}))
if SN[1]==true then
	 HS20()
end
FX1=0
end

function HS20()
	 gg.clearResults()
	 gg.setRanges(32)
	 gg.searchNumber(PAQQR({1081,1084,1081,1096,1081,1083,1081,1096,1081,1079,1081,1086,1081,1078,1081,1096,1081,1083,1081,1095,1081,1095}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.searchNumber(FEDTO({1619,1622,1619,1634,1619,1621,1619,1634,1619,1617,1619,1624,1619,1616,1619,1634,1619,1621,1619,1633,1619,1633}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.getResults(100)
	 gg.editAll(PXAUE({2013,2019,2013,2019,2013,2019,2013,2019}), gg.TYPE_DWORD)
	 gg.toast(SQVXL({-1231,-1247,-1234,-1233,-1244,-1252,-1231,-1247,-1243,-1252,-1235,-1230,-1231,-1246,-1244,-1244,-1243,-1252,-1231,-1247,-1244,-1235,-1243,-1230}))
	 gg.clearResults()
end

function Main6()
SN = gg.multiChoice({
	 HDEUK({1925,1910,1922,1922,1921,1905,1925,1911,1922,1921,1921,1911,1925,1910,1922,1912,1922,1912,1925,1908,1922,1925,1921,1904}),
	 VZDBS({1578,1563,1575,1575,1574,1558,1578,1564,1575,1574,1574,1564,1578,1562,1575,1564,1574,1562,1578,1564,1574,1565,1565,1575,1578,1562,1575,1565,1565,1565}),
	 LCKDZ({1409,1394,1406,1406,1405,1389,1409,1395,1406,1405,1405,1395,1409,1394,1397,1407,1406,1405,1409,1393,1397,1397,1405,1396,1409,1392,1406,1405,1406,1405}),
	 TUFKZ({1982,1967,1979,1979,1978,1962,1982,1968,1979,1978,1978,1968,1982,1970,1978,1978,1970,1962,1982,1966,1978,1964,1978,1979}),
	 FCTFT({1168,1155,1165,1169,1156,1151,1168,1152,1156,1165,1156,1168}),
	 GOHBC({-1661,-1673,-1674,-1682,-1674,-1682,-1661,-1677,-1674,-1675,-1664,-1665}),
}, nil, XUEAA({1096,1092}))
if SN[1]==true then
	 HS8()
end
if SN[2]==true then
	 HS9()
end
if SN[3]==true then
	 HS10()
end
if SN[4]==true then
	 HS11()
end
if SN[5]==true then
	 HS14()
end
if SN[6]==true then
	 HS15()
end
FX1=0
end

function HS8()
	 gg.clearResults()
	 gg.setRanges(32)
	 gg.searchNumber(LLRZV({-1592,-1589,-1592,-1577,-1592,-1591,-1592,-1577,-1592,-1593,-1592,-1595,-1592,-1595,-1592,-1577,-1592,-1594,-1592,-1595,-1592,-1578,-1592,-1578}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.searchNumber(JWMXA({-1485,-1482,-1485,-1470,-1485,-1484,-1485,-1470,-1485,-1486,-1485,-1488,-1485,-1488,-1485,-1470,-1485,-1487,-1485,-1488,-1485,-1471,-1485,-1471}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.getResults(100)
	 gg.editAll(GSCPM({-985,-979,-985,-979,-985,-979,-985,-979}), gg.TYPE_DWORD)
	 gg.toast(FYSJR({-1035,-1051,-1038,-1037,-1048,-1056,-1035,-1051,-1047,-1056,-1039,-1034,-1035,-1050,-1048,-1048,-1047,-1056,-1035,-1051,-1048,-1039,-1047,-1034}))
	 gg.clearResults()
end

function HS9()
	 gg.clearResults()
	 gg.setRanges(32)
	 gg.searchNumber(WPULL({-1043,-1040,-1043,-1028,-1043,-1040,-1043,-1028,-1043,-1044,-1043,-1046,-1043,-1046,-1043,-1028,-1043,-1041,-1043,-1029,-1043,-1029}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.searchNumber(FPVKA({1726,1729,1726,1741,1726,1729,1726,1741,1726,1725,1726,1723,1726,1723,1726,1741,1726,1728,1726,1740,1726,1740}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.getResults(100)
	 gg.editAll(PECCV({-1103,-1097,-1103,-1097,-1103,-1097,-1103,-1097}), gg.TYPE_DWORD)
	 gg.toast(CYSMR({-1627,-1643,-1639,-1640,-1630,-1626,-1627,-1643,-1639,-1640,-1630,-1626}))
	 gg.clearResults()
end

function HS10()
	 gg.clearResults()
	 gg.setRanges(32)
	 gg.searchNumber(UAHSG({1443,1444,1443,1458,1443,1447,1443,1458,1443,1442,1443,1440,1443,1440,1443,1458,1443,1440,1443,1457,1443,1457}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.searchNumber(GEGRP({-1837,-1836,-1837,-1822,-1837,-1833,-1837,-1822,-1837,-1838,-1837,-1840,-1837,-1840,-1837,-1822,-1837,-1840}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.getResults(100)
	 gg.editAll(YNHHD({-1267,-1261,-1267,-1261,-1267,-1261}), gg.TYPE_DWORD)
	 gg.toast(JVSEZ({1937,1921,1925,1924,1934,1938,1937,1921,1925,1924,1934,1938}))
	 gg.clearResults()
end

function HS11()
	 gg.clearResults()
	 gg.setRanges(262207)
	 gg.searchNumber(AXCYR({-1019,-1015,-1019,-1004,-1019,-1016,-1019,-1004,-1019,-1020,-1019,-1022,-1019,-1022,-1019,-1004,-1019,-1017,-1019,-1005,-1019,-1005}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.searchNumber(SFQJV({-1944,-1940,-1944,-1929,-1944,-1941,-1944,-1929,-1944,-1945,-1944,-1947,-1944,-1947,-1944,-1929,-1944,-1942,-1944,-1930,-1944,-1930}), gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
	 gg.getResults(100)
	 gg.editAll(LUKQT({1248,1254,1248,1254,1248,1254}), gg.TYPE_DWORD)
	 gg.toast(OHZMN({1258,1246,1254,1254,1246,1238,1258,1242,1254,1240,1254,1255}))
	 gg.clearResults()
end

function HS14()
	 Main0()
end

function HS15()
	 os.exit()
end

function HS22()
	 os.exit()
end



while true do
if gg.isVisible(true) then
    FX1 = nil
    gg.setVisible(false)
  end
  if FX1 == nil then
    Main0()
  end
end

可以看到该加密非常弱小,我们仅需 hook 如下函数便可拿到脚本功能过程:

gg.searchNumber(...)
gg.getResults(...)
gg.editAll(...)

hook 代码的过程就不演示了,因为我不会 lua (笑)。不过之前看到了一些 GGLua 脚本的网络验证或加密系统。

云托管 GG LUA
一款优秀的Lua加密工具分享与发布

2023年8月1日:
今天在给网络验证对接 Lua 脚本功能,发现了一个 Lua SandBoxes 这实际上就是 Hook(重写)操作了。

Lua SandBoxes

2. 录屏

通过 0. 观察原吐球速度 的录屏操作,再经过不断地减小搜索范围。

我们可以可以编写一段代码。

gg.searchNumber("1,039,516,303", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
gg.toast("找到了:吐球 addr")

3. GameGuardian 提供的变速功能

通过长按 GameGuardian 可以使用其提供的加速服务。

4. 从 Unity 引擎入手

通过观察某球大作战的文件结构,可以发现它是一个 Unity 游戏。在我们使用了一个寻找 Unity 游戏 speed addr 的脚本后,找到了控制游戏运行速度的值。

5. 结果

比原效果快那么一丢丢吧。